unit UPesquisaNovaNFVenda;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UFormPesquisa, DB, DBTables, StdCtrls, Grids, DBGrids, Buttons,
  ExtCtrls, DBCtrls, Mask, ToolEdit, CheckLst;

type
  TFPesquisaNovaNFVenda = class(TFormPesquisa)
    RGSituacaoNF: TRadioGroup;
    Label1: TLabel;
    EdCodigo: TEdit;
    EdNumeroNF: TEdit;
    Label2: TLabel;
    EdSerieNF: TEdit;
    EdSelo: TEdit;
    Label3: TLabel;
    EdSerieSelo: TEdit;
    Label4: TLabel;
    DBLCBCliente: TDBLookupComboBox;
    Label11: TLabel;
    DBLCBTipoVenda: TDBLookupComboBox;
    Label51: TLabel;
    DBLCFOP: TDBLookupComboBox;
    Label24: TLabel;
    Label66: TLabel;
    Label14: TLabel;
    DBLCBProdutoMercadoria: TDBLookupComboBox;
    EdCodProdutoMercadoria: TEdit;
    EdRefProdutoMercadoria: TEdit;
    GBOrigem: TGroupBox;
    RBPedido: TRadioButton;
    RbRomaneio: TRadioButton;
    EdOrigem: TEdit;
    DSCliente: TDataSource;
    CLBEmpresas: TCheckListBox;
    DSTipoVenda: TDataSource;
    QTipoVenda: TQuery;
    DSCFOP: TDataSource;
    QCFOP: TQuery;
    DSProduto_Mercadoria: TDataSource;
    QProduto_Mercadoria: TQuery;
    GBEmissao: TGroupBox;
    Label5: TLabel;
    Label6: TLabel;
    DtPeriodo1: TDateEdit;
    DtPeriodo2: TDateEdit;
    procedure DBLCBClienteKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBLCBClienteEnter(Sender: TObject);
    procedure DBLCBTipoVendaEnter(Sender: TObject);
    procedure DBLCBTipoVendaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBLCFOPEnter(Sender: TObject);
    procedure DBLCFOPKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBLCBProdutoMercadoriaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EdCodProdutoMercadoriaExit(Sender: TObject);
    procedure EdRefProdutoMercadoriaExit(Sender: TObject);
    procedure DSProduto_MercadoriaDataChange(Sender: TObject;
      Field: TField);
    procedure DBLCBProdutoMercadoriaEnter(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtnConsultarClick(Sender: TObject);
    procedure BtnLimparClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BtnSelecionarClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnImprimirClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const Pesquisa_PRoduto = ' SELECT * FROM PRODUTO WHERE (%s = %s) AND (PROD_TIPO = %s) %s ';

var
  FPesquisaNovaNFVenda: TFPesquisaNovaNFVenda;

implementation

uses UPesquisaRapida, UGeral, VendaNotaFiscal, UPreNF;

{$R *.dfm}

procedure TFPesquisaNovaNFVenda.DBLCBClienteKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
  IF KEY = VK_F8 THEN
  BEGIN

    Application.CreateForm(TFPesquisaRapida,FPesquisaRapida);

    FPesquisaRapida.tipo := 'CLIENTE';
    CaPtUrA_pEsQuIsA_rApIdA := '';

    FPesquisaRapida.ShowModal;

    if CaPtUrA_pEsQuIsA_rApIdA <> '' then
      TDBLookupComboBox(Sender).KeyValue := CaPtUrA_pEsQuIsA_rApIdA;

    CaPtUrA_pEsQuIsA_rApIdA := '';

    Exit;

  END;


  case key of
  114 : ShowMessage(TDBLookupComboBox(Sender).Text);

  116 : begin
           TDBLookupComboBox(Sender).ListSource.DataSet.Close;
           TDBLookupComboBox(Sender).ListSource.DataSet.Open;
          end ;
  end;




 if key = 46 then
   TDBLookupComboBox(Sender).KeyValue:=null;
end;

procedure TFPesquisaNovaNFVenda.DBLCBClienteEnter(Sender: TObject);
begin
  inherited;

  if not(TDBLookupComboBox(Sender).ListSource.DataSet.Active) then
    TDBLookupComboBox(Sender).ListSource.DataSet.Open;

end;

procedure TFPesquisaNovaNFVenda.DBLCBTipoVendaEnter(Sender: TObject);
begin
  inherited;
  if not(TDBLookupComboBox(Sender).ListSource.DataSet.Active) then
    TDBLookupComboBox(Sender).ListSource.DataSet.Open;
end;

procedure TFPesquisaNovaNFVenda.DBLCBTipoVendaKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
  case key of
  114 : ShowMessage(TDBLookupComboBox(Sender).Text);

  116 : begin
           TDBLookupComboBox(Sender).ListSource.DataSet.Close;
           TDBLookupComboBox(Sender).ListSource.DataSet.Open;
          end ;
  end;




 if key = 46 then
   TDBLookupComboBox(Sender).KeyValue:=null;
end;

procedure TFPesquisaNovaNFVenda.DBLCFOPEnter(Sender: TObject);
begin
  inherited;
  if not(TDBLookupComboBox(Sender).ListSource.DataSet.Active) then
    TDBLookupComboBox(Sender).ListSource.DataSet.Open;
end;

procedure TFPesquisaNovaNFVenda.DBLCFOPKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
  case key of
  114 : ShowMessage(TDBLookupComboBox(Sender).Text);

  116 : begin
           TDBLookupComboBox(Sender).ListSource.DataSet.Close;
           TDBLookupComboBox(Sender).ListSource.DataSet.Open;
          end ;
  end;




 if key = 46 then
   TDBLookupComboBox(Sender).KeyValue:=null;
end;

procedure TFPesquisaNovaNFVenda.DBLCBProdutoMercadoriaKeyDown(
  Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  inherited;
  IF KEY = VK_F8 THEN
  BEGIN

    Application.CreateForm(TFPesquisaRapida,FPesquisaRapida);

    FPesquisaRapida.tipo    := 'PRODUTO';
    CaPtUrA_pEsQuIsA_rApIdA := '';

    FPesquisaRapida.ShowModal;

    if CaPtUrA_pEsQuIsA_rApIdA <> '' then
      TDBLookupComboBox(Sender).KeyValue := CaPtUrA_pEsQuIsA_rApIdA;

    CaPtUrA_pEsQuIsA_rApIdA := '';

    Exit;

  END;


 case key of
  114 : ShowMessage(TDBLookupComboBox(Sender).Text);

  116 : begin
           TDBLookupComboBox(Sender).ListSource.DataSet.Close;
           TDBLookupComboBox(Sender).ListSource.DataSet.Open;
        end ;
 end;

 if key = 46 then
  begin
   TDBLookupComboBox(Sender).KeyValue:=null;
   EdCodProdutoMercadoria.Clear;
   EdRefProdutoMercadoria.Clear;
  end;
end;

procedure TFPesquisaNovaNFVenda.EdCodProdutoMercadoriaExit(
  Sender: TObject);
var Filtro : String;
begin
  inherited;

  Filtro := ' ';

  if DSProduto_Mercadoria.DataSet.Active = false then
    DSProduto_Mercadoria.DataSet.open;

  if trim(EdCodProdutoMercadoria.Text) <> '' then
  begin

    if Usando_Query_Pesquisa(Format(Pesquisa_PRoduto,['PROD_CODIGO',
                                                      EdCodProdutoMercadoria.Text,
                                                      '0',
                                                      Filtro])) then
      DBLCBProdutoMercadoria.KeyValue := Query_Pesquisa.Fields[0].AsVariant
    else begin
      Showmessage('Nenhum produto encontrado...');
      EdCodProdutoMercadoria.Clear;
    end;
  end;

end;

procedure TFPesquisaNovaNFVenda.EdRefProdutoMercadoriaExit(
  Sender: TObject);
var Filtro : String;
begin
  inherited;

  Filtro := ' ';

  if trim(EdRefProdutoMercadoria.Text) <> '' then
  begin

     if Trim(EdCodProdutoMercadoria.text) <> '' then
      Filtro := ' AND (PROD_CODIGO = '+QuotedStr(EdCodProdutoMercadoria.text)+') ';


    if Usando_Query_Pesquisa(Format(Pesquisa_PRoduto,['PROD_REFERENCIA',
                                                      Quotedstr(EdRefProdutoMercadoria.Text),
                                                      '0',
                                                      Filtro])) then
      DBLCBProdutoMercadoria.KeyValue := Query_Pesquisa.Fields[0].AsVariant
    else begin
      Showmessage('Nenhum produto encontrado...');
      EdRefProdutoMercadoria.clear;
    end;
  end;

end;

procedure TFPesquisaNovaNFVenda.DSProduto_MercadoriaDataChange(
  Sender: TObject; Field: TField);
begin
  EdCodProdutoMercadoria.Text := DSProduto_Mercadoria.DataSet.Fields[0].AsString;
  EdRefProdutoMercadoria.Text := DSProduto_Mercadoria.DataSet.Fields[3].AsString;
end;

procedure TFPesquisaNovaNFVenda.DBLCBProdutoMercadoriaEnter(
  Sender: TObject);
begin
  inherited;
  if not(TDBLookupComboBox(Sender).ListSource.DataSet.Active) then
    TDBLookupComboBox(Sender).ListSource.DataSet.Open;
end;

procedure TFPesquisaNovaNFVenda.FormCreate(Sender: TObject);
begin
  inherited;
  Usando_Query_Pesquisa(' SELECT             '+
                        '       EMP_CODIGO,  '+
                        '       EMP_FANTASIA '+
                        ' FROM EMPRESA       ');

  Query_Pesquisa.First;

  CLBEmpresas.Items.Clear;

  while not (Query_Pesquisa.Eof) do
  begin

    CLBEmpresas.Items.Add(Query_Pesquisa.fieldByname('EMP_CODIGO').AsString + '-' + Query_Pesquisa.fieldByname('EMP_FANTASIA').AsString);
    Query_Pesquisa.Next;

  end;

  CLBEmpresas.Checked[0] := true;

end;

procedure TFPesquisaNovaNFVenda.BtnConsultarClick(Sender: TObject);
const ctSql = ' SELECT DISTINCT                                                   '+#10+
              '         NOTAFISCALVENDA.NF_CODIGO,                                '+#10+
              '         NOTAFISCALVENDA.NF_NUMERONF,                              '+#10+
              '         NOTAFISCALVENDA.NF_SERIENF,                               '+#10+
              '         NOTAFISCALVENDA.NF_NUMEROSELO,                            '+#10+
              '         NOTAFISCALVENDA.NF_SERIESELO,                             '+#10+
              '         NOTAFISCALVENDA.NF_DATAEMISSAO,                           '+#10+
              '         CLIENTE.CLI_RAZAO,                                        '+#10+
              '         NOTAFISCALVENDA.NF_VALORFINALNOTA                         '+#10+
              ' FROM NOTAFISCALVENDA                                              '+#10+
              '         INNER JOIN CLIENTE ON                                     '+#10+
              '                 (CLIENTE.CLI_CODIGO = NOTAFISCALVENDA.NF_CLIENTE) '+#10+
              '         INNER JOIN ITENSNOTAFISCALVENDA I ON                      '+#10+
              '                 (I.ITENSNF_NOTAFISCAL = NOTAFISCALVENDA.NF_CODIGO) '+#10+
              ' WHERE                                                             '+#10+
              '         (NOTAFISCALVENDA.NF_CODIGO > 0) %s                        '+#10+
              ' ORDER BY                                                          '+#10+
              '         NOTAFISCALVENDA.NF_CODIGO                                 ';

var emp,Filtro : String;
begin

  Filtro := '';

  emp := ConcatenaEmpresas(CLBEmpresas);

  if Trim(EdCodigo.Text) <> '' then
    Filtro := ' AND (NOTAFISCALVENDA.NF_CODIGO = '+QuotedStr(EdCodigo.Text)+') ';

  if Trim(EdNumeroNF.Text) <> ''  then
    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_NUMERONF = '+QuotedStr(EdNumeroNF.Text)+') ';

  if Trim(EdSerieNF.Text) <> ''  then
    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_SERIENF = '+QuotedStr(EdSerieNF.Text)+') ';

  if Trim(EdSelo.Text) <> ''  then
    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_NUMEROSELO = '+QuotedStr(EdSelo.Text)+') ';

  if Trim(EdSerieSelo.Text) <> ''  then
    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_SERIESELO = '+QuotedStr(EdSerieSelo.Text)+') ';

  if RGSituacaoNF.ItemIndex <> 3 then
    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_SITUACAO = '+IntToStr(RGSituacaoNF.ItemIndex)+') ';

  if trim(EdOrigem.Text) <> ''  then
  begin

    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_NUMERO = '+EdOrigem.Text+') ';

    if RBPedido.Checked then
      Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_ORIGEM = ''PV'')'
    else
      Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_ORIGEM = ''RO'')';

  end;

  IF DtPeriodo1.Date <> 0 then
    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_DATAEMISSAO >= '+QuotedStr(FormatDateTime('mm/dd/yyyy 00:00:00',DtPeriodo1.Date))+') ';

  IF DtPeriodo2.Date <> 0 then
    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_DATAEMISSAO <= '+QuotedStr(FormatDateTime('mm/dd/yyyy 23:59:59',DtPeriodo2.Date))+') ';

  if DBLCBCliente.KeyValue <> Null then
    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_CLIENTE = '+VARtostr(DBLCBCliente.KeyValue)+') ';

  if DBLCBTipoVenda.KeyValue <> Null then
    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_TIPOVENDA = '+VARtostr(DBLCBTipoVenda.KeyValue)+') ';

  if DBLCFOP.KeyValue <> Null then
    Filtro := Filtro + ' AND (NOTAFISCALVENDA.NF_CFOPNF = '+VARtostr(DBLCFOP.KeyValue)+') ';

  if DBLCBProdutoMercadoria.KeyValue <> Null then
    Filtro := Filtro + ' AND (ITENSNOTAFISCALVENDA.ITENSNF_PRODUTO = '+VARtostr(DBLCBProdutoMercadoria.KeyValue)+') ';

  QPesquisa.Close;
  QPesquisa.SQL.Clear;
  QPesquisa.SQL.Add(Format(ctSql,[FILTRO]));
  QPesquisa.OPEN;
  
  inherited;

end;

procedure TFPesquisaNovaNFVenda.BtnLimparClick(Sender: TObject);
begin
  inherited;

  EdCodigo.CLEAR;
  EdNumeroNF.CLEAR;
  EdSerieNF.CLEAR;
  EdSelo.CLEAR;
  EdSerieSelo.CLEAR;

  RGSituacaoNF.ItemIndex := 3;

  RBPedido.Checked   := FALSE;
  RbRomaneio.Checked := FALSE;

  DtPeriodo1.Date := 0;
  DtPeriodo2.Date := 0;

  DBLCBCliente.KeyValue   := Null;
  DBLCBTipoVenda.KeyValue := Null;
  DBLCFOP.KeyValue        := Null;

  EdCodProdutoMercadoria.clear;
  EdRefProdutoMercadoria.clear;

  DBLCBProdutoMercadoria.KeyValue := Null;

  EdCodigo.SetFocus;

end;

procedure TFPesquisaNovaNFVenda.FormShow(Sender: TObject);
begin
  inherited;
  edcodigo.setfocus;
end;

procedure TFPesquisaNovaNFVenda.BtnSelecionarClick(Sender: TObject);
begin
  inherited;

  fvendanotafiscal.dsCadastro.DataSet.locate('NF_CODIGO',DSPesquisa.DataSet.Fields[0].AsString,[]);
  BtnFechar.click;

end;

procedure TFPesquisaNovaNFVenda.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;

  FPesquisaNovaNFVenda := nil;
  action := cafree;

end;


procedure TFPesquisaNovaNFVenda.BtnImprimirClick(Sender: TObject);
begin
  inherited;
  
  if FPreNF = nil then
    Application.CreateForm(TFPreNF, FPreNF);

  FPreNF.exibiNF(QPesquisa.Fields[0].AsString,'M');

  FPreNF := Nil;

end;

end.
